import requests
from requests import RequestException


class ApiManager:
    def __init__(self, base_url):
        """
        初始化ApiManager实例。

        参数:
        - base_url: API的基础URL
        """
        self.base_url = base_url.rstrip('/')  # 确保base_url没有尾随斜杠

    def _request(self, method, uri, params=None, data=None, json=None, headers=None):
        """
        发送HTTP请求的通用方法。

        参数:
        - method: HTTP方法('GET', 'POST', 'PUT', 'DELETE')
        - endpoint: API的具体路径
        - params: URL参数(仅适用于GET请求)
        - data: 表单数据
        - json: JSON格式的数据
        - headers: 自定义头部

        返回:
        - dict: 包含响应状态、消息和数据的字典
        """
        url = f"{self.base_url}/{uri.lstrip('/')}"
        try:
            response = requests.request(method, url, params=params, data=data, json=json, headers=headers)
            response.raise_for_status()  # 如果响应状态码表示错误，则抛出HTTPError

            # 假设服务器返回的数据是JSON格式

            return response.json()
        except requests.exceptions.RequestException as e:
            raise RequestException(f"请求失败: {e}")

    def get(self, endpoint, params=None, headers=None):
        """发送GET请求"""
        return self._request('GET', endpoint, params=params, headers=headers)

    def post(self, endpoint, data=None, json=None, headers=None):
        """发送POST请求"""
        return self._request('POST', endpoint, data=data, json=json, headers=headers)

    def put(self, endpoint, data=None, json=None, headers=None):
        """发送PUT请求"""
        return self._request('PUT', endpoint, data=data, json=json, headers=headers)

    def delete(self, endpoint, headers=None):
        """发送DELETE请求"""
        return self._request('DELETE', endpoint, headers=headers)


# 使用示例
if __name__ == "__main__":
    # 替换为你的实际服务器地址和端口
    base_url = "http://111.229.67.228:9095"

    am = ApiManager(base_url)

    # 示例: 登录(POST)
    login_data = {
        'username': 'admin',
        'password': '123456',
        'role': 'ADMIN'
    }
    result = am.post('/login', json=login_data)
    print(result["code"])
